home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 49
/
Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso
/
-serious-
/
programming
/
e
/
lsestuff
/
collectionzyx.e
< prev
next >
Wrap
Text File
|
1999-11-29
|
8KB
|
335 lines
OPT MODULE
MODULE '*xli'
MODULE '*collectionYX'
EXPORT OBJECT collectionZYX OF xli
ENDOBJECT
PROC private_Methods_From_Here() OF collectionZYX IS EMPTY
PROC collectionZYX() OF collectionZYX IS TRUE
PROC clear() OF collectionZYX
DEF nayx:PTR TO collectionZYX
DEF next
nayx := self.first()
WHILE nayx
next := nayx.next
self.remove(nayx)
END nayx
nayx := next
ENDWHILE
ENDPROC
PROC scrollX(amount) OF collectionZYX
DEF nayx:PTR TO collectionYX
nayx := self.first()
WHILE nayx
nayx.scrollX(amount)
nayx := nayx.next
ENDWHILE
ENDPROC
PROC scrollZ(amount) OF collectionZYX IS self.scroll(amount)
PROC scrollY(amount) OF collectionZYX
DEF nayx:PTR TO collectionYX
nayx := self.first()
WHILE nayx
nayx.scrollY(amount)
nayx := nayx.next
ENDWHILE
ENDPROC
PROC getCollectionYX(z) OF collectionZYX IS self.find(z)
PROC countZYX() OF collectionZYX
DEF nayx:PTR TO collectionYX
DEF count=NIL
nayx := self.first()
WHILE nayx
count := count + nayx.countYX()
INC count
nayx := nayx.next
ENDWHILE
ENDPROC
PROC countY() OF collectionZYX
DEF nayx:PTR TO collectionYX
DEF count=NIL
nayx := self.first()
WHILE nayx
count := count + nayx.countY()
nayx := nayx.next
ENDWHILE
ENDPROC count
PROC countX() OF collectionZYX
DEF nayx:PTR TO collectionYX
DEF count=NIL
nayx := self.first()
WHILE nayx
count := count + nayx.countX()
nayx := nayx.next
ENDWHILE
ENDPROC count
PROC countYX() OF collectionZYX
DEF nayx:PTR TO collectionYX
DEF count=NIL
nayx := self.first()
WHILE nayx
count := count + nayx.countYX()
nayx := nayx.next
ENDWHILE
ENDPROC
PROC countZ() OF collectionZYX IS self.countNodes()
PROC getMaxZ() OF collectionZYX IS self.getMaxID()
PROC getMinZ() OF collectionZYX IS self.getMinID()
PROC getMaxY() OF collectionZYX
DEF nayx:PTR TO collectionYX
DEF maxy=NIL
nayx := self.first()
WHILE nayx
maxy := Max(maxy, nayx.getMaxY())
nayx := nayx.next
ENDWHILE
ENDPROC maxy
PROC getMinY() OF collectionZYX
DEF nayx:PTR TO collectionYX
DEF miny=NIL
nayx := self.first()
WHILE nayx
miny := Min(miny, nayx.getMinY())
nayx := nayx.next
ENDWHILE
ENDPROC miny
PROC getMaxX() OF collectionZYX
DEF nayx:PTR TO collectionYX
DEF maxx=NIL
nayx := self.first()
WHILE nayx
maxx := Max(maxx, nayx.getMaxX())
nayx := nayx.next
ENDWHILE
ENDPROC maxx
PROC getMinX() OF collectionZYX
DEF nayx:PTR TO collectionYX
DEF minx=NIL
nayx := self.first()
WHILE nayx
minx := Min(minx, nayx.getMinX())
nayx := nayx.next
ENDWHILE
ENDPROC minx
PROC set(z, y, x, value) OF collectionZYX
DEF nayx:PTR TO collectionYX
nayx := self.ordFind(z)
IF nayx = NIL
IF value = NIL THEN RETURN NIL
NEW nayx.collectionYX()
nayx.id := y
self.ordInsert(nayx)
ENDIF
nayx.set(y, x, value)
ENDPROC
PROC get(z, y, x) OF collectionZYX
DEF nayx:PTR TO collectionYX
nayx := self.ordFind(z)
IF nayx = NIL THEN RETURN NIL
ENDPROC nayx.get(y, x)
PROC unSet(z, y, x) OF collectionZYX
DEF nayx:PTR TO collectionYX
nayx := self.ordFind(z)
IF nayx = NIL THEN RETURN NIL
nayx.unSet(y, x)
IF nayx.countYX() = NIL
self.remove(nayx)
END nayx
ENDIF
ENDPROC
PROC applyNewFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
DEF nayx1:PTR TO collectionYX
DEF nayx2:PTR TO collectionYX
DEF newnayx:PTR TO collectionYX
nayx1 := self.first()
nayx2 := nazyx.first()
WHILE nayx2
IF nayx1.id = nayx2.id
nayx1 := nayx1.next
nayx2 := nayx2.next
ELSEIF nayx1.id > nayx2.id
NEW newnayx.collectionYX()
newnayx.id := nayx2.id
nayx2.cloneContentsTo(newnayx)
self.ordInsert(newnayx)
nayx2 := nayx2.next
ELSE -> nayx1.id < nayx2
nayx1 := nayx1.next
ENDIF
ENDWHILE
ENDPROC
PROC applyAllFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
DEF nayx1:PTR TO collectionYX
DEF nayx2:PTR TO collectionYX
DEF newnayx:PTR TO collectionYX
nayx1 := self.first()
nayx2 := nazyx.first()
WHILE nayx2
IF nayx1.id = nayx2.id
nayx2.cloneContentsTo(nayx1)
nayx1 := nayx1.next
nayx2 := nayx2.next
ELSEIF nayx1.id > nayx2.id
NEW newnayx.collectionYX()
newnayx.id := nayx2.id
nayx2.cloneContentsTo(newnayx)
self.ordInsert(newnayx)
nayx2 := nayx2.next
ELSE -> nayx1.id < nayx2
nayx1 := nayx1.next
ENDIF
ENDWHILE
ENDPROC
PROC applyORFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
DEF nayx1:PTR TO collectionYX
DEF nayx2:PTR TO collectionYX
DEF newnayx:PTR TO collectionYX
nayx1 := self.first()
nayx2 := nazyx.first()
WHILE nayx2
IF nayx1.id = nayx2.id
nayx1 := nayx1.next
nayx2 := nayx2.next
nayx1.applyORFrom(nayx2)
ELSEIF nayx1.id > nayx2.id
NEW newnayx.collectionYX()
newnayx.id := nayx2.id
nayx2.cloneContentsTo(newnayx)
self.ordInsert(newnayx)
nayx2 := nayx2.next
ELSE -> nayx1.id < nayx2
nayx1 := nayx1.next
ENDIF
ENDWHILE
ENDPROC
PROC applyExistsFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
DEF nayx1:PTR TO collectionYX
DEF nayx2:PTR TO collectionYX
nayx1 := self.first()
nayx2 := nazyx.first()
WHILE nayx2
IF nayx1.id = nayx2.id
nayx1 := nayx1.next
nayx2 := nayx2.next
nayx1.applyExistsFrom(nayx2)
ELSEIF nayx1.id > nayx2.id
nayx2 := nayx2.next
ELSE -> nayx1.id < nayx2
nayx1 := nayx1.next
ENDIF
ENDWHILE
ENDPROC
PROC applyANDFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
DEF nayx1:PTR TO collectionYX
DEF nayx2:PTR TO collectionYX
nayx1 := self.first()
nayx2 := nazyx.first()
WHILE nayx2
IF nayx1.id = nayx2.id
nayx1 := nayx1.next
nayx2 := nayx2.next
nayx1.applyANDFrom(nayx2)
ELSEIF nayx1.id > nayx2.id
nayx2 := nayx2.next
ELSE -> nayx1.id < nayx2
nayx1 := nayx1.next
ENDIF
ENDWHILE
ENDPROC
PROC applyAveFrom(nazyx:PTR TO collectionZYX) OF collectionZYX
DEF nayx1:PTR TO collectionYX
DEF nayx2:PTR TO collectionYX
DEF newnayx:PTR TO collectionYX
nayx1 := self.first()
nayx2 := nazyx.first()
WHILE nayx2
IF nayx1.id = nayx2.id
nayx1 := nayx1.next
nayx2 := nayx2.next
nayx1.applyAveFrom(nayx2)
ELSEIF nayx1.id > nayx2.id
NEW newnayx.collectionYX()
newnayx.id := nayx2.id
newnayx.applyAveFrom(nayx2)
self.ordInsert(newnayx)
nayx2 := nayx2.next
ELSE -> nayx1.id < nayx2
nayx1 := nayx1.next
ENDIF
ENDWHILE
ENDPROC
PROC cloneContentsTo(nazyx:PTR TO collectionZYX) OF collectionZYX
DEF nayx:PTR TO collectionYX
DEF newnayx:PTR TO collectionYX
nazyx.clear()
nayx := self.first()
WHILE nayx
NEW newnayx.collectionYX()
nayx.cloneContentsTo(newnayx)
nazyx.addLast(newnayx)
nayx := nayx.next
ENDWHILE
ENDPROC self.first()
PROC cmpMapZYX(nazyx:PTR TO collectionZYX) OF collectionZYX
DEF nayx1:PTR TO collectionYX
DEF nayx2:PTR TO collectionYX
IF self.cmpMap(nazyx) = FALSE THEN RETURN FALSE
nayx1 := self.first()
nayx2 := nazyx.first()
WHILE nayx1
IF nayx1.cmpMapYX(nayx2) = FALSE THEN RETURN FALSE
nayx1 := nayx1.next
nayx2 := nayx2.next
ENDWHILE
ENDPROC TRUE
PROC cleanUp() OF collectionZYX
DEF nayx:PTR TO collectionYX
DEF next:PTR TO collectionYX
nayx := self.first()
WHILE nayx
next := nayx.next
nayx.cleanUp()
IF nayx.countX() = NIL
self.remove(nayx)
END nayx
ENDIF
nayx := next
ENDWHILE
ENDPROC
PROC end() OF collectionZYX IS self.clear()